'''

现有一份公司员工数据集：

df = pd.read_csv('data/company.csv')

df.head(3)
Out[179]:
   EmployeeID birthdate_key  age  city_name department      job_title gender
0        1318      1/3/1954   61  Vancouver  Executive            CEO      M
1        1319      1/3/1957   58  Vancouver  Executive      VP Stores      F
2        1320      1/2/1955   60  Vancouver  Executive  Legal Counsel      F
分别只使用 query 和 loc 选出年龄不超过四十岁且工作部门为 Dairy 或 Bakery 的男性。

选出员工 ID 号 为奇数所在行的第1、第3和倒数第2列。

按照以下步骤进行索引操作：

把后三列设为索引后交换内外两层

恢复中间层索引

修改外层索引名为 Gender

用下划线合并两层行索引

把行索引拆分为原状态

修改索引名为原表名称

恢复默认索引并将列保持为原表的相对位置
'''
import pandas as pd
df = pd.read_csv('data/company.csv')
dpt = ['Dairy', 'Bakery']
# 使用query 条件进行检索行数据 显示前三行
df.query("(age <= 40)&(department == @dpt)&(gender=='M')").head(3)
df.loc[(df.age<=40)&df.department.isin(dpt)&(df.gender=='M')].head(3)
# 偶数行，
df.iloc[(df.EmployeeID%2==1).values,[0,2,-2]].head()
# 避免交换影响原来数据，拷贝
df_op = df.copy()
# 获取columns的后三列 axis=0 交换行index
df_op = df_op.set_index(df_op.columns[-3:].tolist()).swaplevel(0,2,axis=0)
df_op = df_op.reset_index(level=1)
# 修改外层索引名为 Gender
df_op = df_op.rename_axis(index={'gender':'Gender'})
df_op.index = df_op.index.map(lambda x:'_'.join(x))
df_op.index = df_op.index.map(lambda x:tuple(x.split('_')))
#  rename
df_op = df_op.rename_axis(index=['gender', 'department'])
df_op = df_op.reset_index().reindex(df.columns, axis=1)
# 验证是否还原
df_op.equals(df)
'''
现有一份关于巧克力评价的数据集：

df = pd.read_csv('data/chocolate.csv')

df.head(3)
Out[181]: 
    Company  Review\nDate Cocoa\nPercent Company\nLocation  Rating
0  A. Morin          2016            63%            France    3.75
1  A. Morin          2015            70%            France    2.75
2  A. Morin          2015            70%            France    3.00
把列索引名中的 \n 替换为空格。

巧克力 Rating 评分为1至5，每0.25分一档，请选出2.75分及以下且可可含量 Cocoa Percent 高于中位数的样本。

将 Review Date 和 Company Location 设为索引后，选出 Review Date 在2012年之后且 Company Location 不属于 France, Canada, Amsterdam, Belgium 的样本。
'''
df = pd.read_csv('data/chocolate.csv')
df.columns = [' '.join(i.split('\n')) for i in df.columns]
# 替换数据变成数字
df['Cocoa Percent'] = df['Cocoa Percent'].apply(lambda x:float(x[:-1])/100)
df.query("(Rating<=2.75)&(`Cocoa Percent`>`Cocoa Percent`.median())")
idx = pd.IndexSlice
res = df.set_index(['Review Date', 'Company Location']).sort_index(level=0)
exclude = ['France', 'Canada', 'Amsterdam', 'Belgium']
# 取反~res.index.get_level_values(1).isin(exclude) 获取index
res.loc[idx[2012:,~res.index.get_level_values(1).isin(exclude)],:]